package ticketsell.seller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;

import ticketsell.model.DatosCompra;
import ticketsell.model.EventoDiario;
import ticketsell.model.asistentes.AsistenteDatos;
import ticketsell.xml.XMLEventoDiario;


public class SellerAssistant implements AsistenteDatos{
	
	EventoDiario evento;
	
	public SellerAssistant(){
		evento = null;
	}
	
	public SellerAssistant(EventoDiario evento){
		this.evento=evento;
	}

	public boolean inicializar(Date fecha){
		XMLEventoDiario xmlTool = new XMLEventoDiario(Constants.DTD);
		evento = new EventoDiario();
		evento.setFecha(fecha);
		evento.setDescripcion("");
		SimpleDateFormat format = new SimpleDateFormat(Constants.DATE_FORMAT);
        String fechaStr = format.format(fecha);
		return xmlTool.escribir(evento, Constants.EVENT_FILES_PATH+fechaStr+Constants.XML_EXTENSION);
	}
	
	public void guardar(){
		XMLEventoDiario xmlTool = new XMLEventoDiario(Constants.DTD);
		SimpleDateFormat format = new SimpleDateFormat(Constants.DATE_FORMAT);
        String fechaStr = format.format(evento.getFecha());
		xmlTool.escribir(evento, Constants.EVENT_FILES_PATH+fechaStr+Constants.XML_EXTENSION);
	}
	
	public boolean cargar(Date fecha){
		if(evento==null){
			XMLEventoDiario xmlTool = new XMLEventoDiario(Constants.DTD);
			SimpleDateFormat format = new SimpleDateFormat(Constants.DATE_FORMAT);
	        String fechaStr = format.format(evento.getFecha());
			evento = xmlTool.leer(Constants.EVENT_FILES_PATH+fechaStr+Constants.XML_EXTENSION);
			return true;
		}
		else{
			return false;
		}
	}
	
	public boolean comprar(DatosCompra datos){
		//Si esta ocupado, devolvemos false.
		if(evento.getListaAsientos().get(datos.getNumAsiento()-1)==true)
			return false;
		else{
		    evento.getListaAsientos().set(datos.getNumAsiento()-1, true);
		    return true;
		}
	}
	
	public boolean anular(DatosCompra datos){
		if(evento.getListaDatosCompra().contains(datos)){
			evento.getListaAsientos().set(datos.getNumAsiento()-1, false);
			evento.getListaDatosCompra().remove(datos);
			return true;
		}
		else{
			return false;
		}
	}
	
	public Vector<Boolean> estadoAsientos(){
		return evento.getListaAsientos();
	}
	
	public DatosCompra informacion(int asiento){
		return evento.getListaDatosCompra().get(asiento-1);
	}
	
	public ArrayList<DatosCompra> infoSala(){
		return (ArrayList<DatosCompra>)evento.getListaDatosCompra();
	}
	
}
